If I may:
(mac defmethod(name type args . body)
- `(= ((vtables* ',name) ',type)
+ `(= ((or= (vtables* ',name) (table)) ',type)
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= ..) ...)