Great topic. Adding my opinoins below.
EXTENSIONS ARE IMPORTANT
Extensions is, IMO, an important feature of a vital media type format. it let's ppl fill in "missing things" w/o a lot of up front ceremony and ends up encouraging mods to the format that could eventually get rolled into the spec.
NO ADVERTISING
i've played w/ advertising extensions in responses (usually through a profile URI or a special rel="extension" URI) but have not found it much help. essentially, advertising for extensions is a way to allow clients to REJECT the response -- something I don't encourage.
MUST IGNORE
instead, i really push ppl to build clients with MUST IGNORE as a feature -- just ignore the stuff you don't understand. this keeps the number of accepted responses high without requiring clients to do something new if an extension shows up.
ALWAYS OPTIONAL, NEVER OVERRIDE
the second leg of the MUST IGNORE pattern is to make all extensions OPTIONAL - IOW, clients are still fully compliant when they ignore extensions. This also means there is guidance that no extension can change any existing part of the spec (e.g. override or remove spec'd behaviors).
NAMING CHALLENGE
In Cj, extensions can be a simple as a new name/value pair on an existing element on up to a new root-level object with lots of details below. I have a warning to name the elements uniquely, but (frankly) don't have a lot of enforcement control. not found a good way to enforce this w/o adding too high a bar for creating useful extensions.
REPO AS REGISTRY
finally, for Cj, i started using a repo for extensions. this is a low bar for entry and seems to work OK.
cheers.