Moved field definition logic out of the entity form submits and over into the entity class to act on postSave/postDelete. This ensures proper action anytime a custom publish option entity is touched, like uninstalling the module (deletes all custom publish options, and all corresponding field definitions). However, it also deletes the config cache, so that base field information is rebuilt (and therefore they appear on node forms without the user clearing cache, a common complaint of the Drupal 7 version).
Refactored some code for clarity.. more to follow.
Fixed an issue where uninstalling the module also does not remove the field definitions created by custom publishing options - creating an issue later (i.e. 'a field definition by that name already exists' error).
Sets custom publishing options into their own fieldset on node content forms. Now when you create a custom publishing option, it will automatically be set into the content type form with the proper widget, without having to go configure it first.
Big release, lots of outstanding issues have been resolved.
The UI has changed slightly, the Custom Publish page in the admin is now an overview table of all types, with 'Add a new option' tab in the top right.
The permission to access and use this has been changed from 'administer nodes' to 'administer content types' to make it a bit more friendly without requiring god level access.
Refactored code that creates field definitions. Added a description property to the entity and replaced static description on the field. This is now visible in Views. Added checks to ensure field definitions don't already exist when creating a custom publishing option so there is no collision or error, negating a need to prefix field definitions with cpo_. Removed old code related to Features.
Along with integration with Features, Rules, and Views modules, each custom publishing option can now have permissions assigned to roles. Custom Publishing Options can also be used in conjunction with Override Node Options without conflicting- and still adhere to the permissions set.
The node admin content overview form now has Custom Publishing Options integrated into the filters. You can select nodes and mass update them with a custom publish option.