Acording to Accesor GET, get finds a property on the property list2 of symbol whose property indicator is identical to indicator, and returns its corresponding property value. If the property doesn't exists, it returns NIL.
Then, if
(get 'clyde 'species) => nil
the expression
(setf (get 'clyde 'species) 'elephant)
must be the same as
(setf nil 'elephant)
and fail, but it's not the case.
How it comes that the same get
produces a value in one case and a place in the other?
Edit
I found the answer here: How does using the SETF function to extend SETF work?