This is how OO is done in Common Lisp (CLOS is the standard here) and Scheme (no standard object system, but every so often someone writes one for themselves).
$$ Reading Let Over Lambda is what done it to me.
(defmethod some-user-greeting ((user some-userc) &optional daytime)
means that the argument 'user' to the method MUST be an object of class 'some-userc'.
EmacsLisp's CLOS doesn't have as much type checking as CL's but it is there.
This is what CL people say, certainly; what you think of this statement (true? useful? a bad definition of 'object'?) depends entirely on what you think an 'object' is.
If you're a Smalltalker (or a Java programmer, or a C++ programmer, or a user of any language that got its object system from Smalltalk), then an object is something that can respond to messages. CLOS doesn't work like this: There are no messages, and expressions don't contain objects privileged to be the recipient of the message being used; therefore, a Smalltalker might well say that while CLOS has inheritance and polymorphism, it doesn't have objects as such.
(And, off in the corner, some C programmers are insisting that an int is a perfectly good object.)