(defclass mc (standard-class) ((foo :initarg :foo :accessor foo :initform 'some-default))) (defmethod sb-mop:validate-superclass ((class mc) (superclass standard-object)) t) (defmethod shared-initialize ((o mc) slots &rest args &key foo &allow-other-keys) (apply #'call-next-method o slots :foo (etypecase foo (null foo) ((cons symbol null) (first foo))) args)) (defclass example-with-foo () () (:metaclass mc) (:foo wow)) (defclass example-without-foo () () (:metaclass mc)) (print (list (foo (find-class 'example-with-foo)) (foo (find-class 'example-without-foo)))) (defclass bad () () (:metaclass mc) (:foo bar baz)) ; should signal an error