In https://gist.github.com/kriskowal/272da24e332e78ec4c94 I separated `UrThing` and `Thing` to illustrate the utility

You’ll note that `UrThing`, for reasons of conceptual clarity more than anything else, *only* defines `specialize` and the means of specialization. `Thing` then uses the polymorphic facilities of `UrThing.specialize` to patch in support for Montage’s descriptor defaults for all its heirs: https://gist.github.com/kriskowal/272da24e332e78ec4c94#file-thing-js-L138-L154

As you can see, it is possible to augment the meaning of a property descriptor just by overriding `defineProperty` on a parent type, anywhere in the inheritance chain. It is also possible to add support for both lazy and eager computed properties, distinct properties, and bindings to the descriptor language using the same technique, in a way in which the concerns are nicely separated.

These are merely examples. This is a bit of a Pandora’s box, but I tend to favor enabling over crippling, even if we never take advantage of the ability.