If I may:
(mac defmethod(name type args . body) - `(= ((vtables* ',name) ',type) + `(= ((or= (vtables* ',name) (table)) ',type) (fn ,args ,@body)))
The drawback is that it's every defmethod's responsibility to make sure it sets the vtable entry if necessary.
I was thinking more of wrapping the implementation of either defgeneric or defmethod in a `(do (or= ..) ...)
-----