Hi,
1.
A somewhat questionable, but creative way of hiding unused options Unfortunately It has (at least) one undesirable side effect. If no options are in effect for a group, like the Main Attributes for instance, an empty box, with a title but without any option fields, is displayed. Is there an easy way to prevent that?
I'm sorry but I'm not following you here. Could you provide more information on your issue ?
2.
The preview area of the custom field edit interface is just for you to get a look at how the field will look like on the frontend.
There is no real saving done and thus no check called.
You must be mistaken with the "default" setting which also displays the your custom field in the custom field edit interface and is saved to be used as default value when the custom field is then used elsewhere.
In fact, if you don't have "default" in the options array, the default area's HTML will still be on the page, but hidden, and thus the check function will be called for the default input even if you don't see it, and thus that's normal that the value provided is empty as you didn't even had a chance to enter something in it in the interface.
So to check whether you're checking for a real element or the default value in the backend, you can look at the $field->field_namekey in your check function. That variable should contain "field_default" when checking the default value and otherwise it will be the field's column name.