The root .model.json is getting rendered by ComponentExporter. This is different than normal jackson exporter. So, the business logic can go into
getExportedType() that is in each sling model. if we return NULL from here instead of resource type, the component do not renders on Front End.
This would require un-caching of root .model.json if some properties needs to be checked on each request.
I am looking now versioning of this root .model.json and use selector in order to cache .model.json with different names for diff req types. I am unable to actually get how root .model.json is invoking sling models. If I use different selector in sling model say 'selector1', still the model gets called with '.model' selector.
Update : Versioning can be achieved with .model.group1.json, Aapache can read some cookie, redirect request of .model.json to .model.group1.json, and the sling model will have request selectors .model.group1.
Thanks @briankasingli for looking into this.