my take is basically (2): define separate (de)serializers for structure-object's and standard-object's instead of a shared (def serializer-deserializer slot-object ...) and use them appropriately from (def serializer-deserializer structure-object ... ) and (def serializer-deserializer standard-object +standard-object-code+ ...). maybe dealing with funcallable-standard-class, too if necessary.
for the record, as far as i remember, i've implemented this meanwhile...
see the generics: - write-object-slots - read-object-slots