I would like my mod to support vanilla clients when running on a server, as much as possible. I know that the following work: 
 
The server will accept connections from vanilla clients if I set acceptableRemoteVersions = "*" 
If I add a recipe, the client will not see a preview of the result, but they can still shift-click the output box and perform the recipe. I'm OK with this. 
I saw items with the default model (purple/black box) while playing on a server using a vanilla client. So I know that in some cases the vanilla client will use this when it doesn't know how to render an item (but I don't know the details). 
 
When I naively tried to connect to a server with my mod, I found out: 
 
The vanilla client will crash if the server sends it an unknown item id.  
I am wondering if I can get the server to substitute a vanilla item when it sends packets to a vanilla client; ie the server will know the player is holding mymod:item, but it will check if the client is vanilla, and if so it will tell the client the player is holding minecraft:dirt. Is there any hook I could use to accomplish this, or another approach? 
  
See https://github.com/stewbasic/CommandItem if more specifics are needed.