How to default a property to a custom property

Several years ago I wrote a small script that generates a mesh for an object based on three or four custom properties of the object. The properties would be stored in the object and every now and then I would change the custom properties and re-generate the mesh. Works fine.
Except that through the years the script has grown to have sixteen properties of different types, and I’d like to turn it into a propertygroup instead of having 16 custom properties.

But I want it to be backward compatible so that it will also work with my older blend files. If the variables are defined in a custom property, they should be moved to the new propertygroup.
On the other hand, objects that do not have the custom properties (because they were never intended to be generated with my script) should also not have the propertygroup.

Where should I do the migration of old->new properties? I could try to do it in the poll method, but to me that sounds extremely hacky. In the execute() I would like to be able to just assume the properties in the new format, so it should happen before that

And how would I make the property optional? so that the property would be None for most objects, and only have a value for the special objects?