This is a bigger project, I talked a bit to @MedeaMelana about using JsonGrammar which has an internal representation of conversions that we can use if the modules are exposed.
So we could implement this separately in json-schema for starters, just another function like gSchema that uses the JsonGrammar representation to make a schema.
As a second step we may want to look in to using JsonGrammar for generic-aeson, it means we'd lose the ability to just have one of the To/FromJSON instances but in practice it's fairly uncommon that you can only write one of them.