How to allow integer and decimal fields with default values to be saved as empty. If I set a default value on a decimal or integer field, the user cannot delete the default value and save the node.  

They can set the value to another value including zero, and that is saved correctly.  

But if the contents of the field is deleted, on save, the field is automatically populated with the default value again.  

This doesn't seem right.  I guess I could intercept the empty field and set it to zero, but surely that's not necessary?  Am I missing something?
This is a bug in D7. Checkout https://www.drupal.org/node/1253820. I checked it works while editing content but not while creating. This has been fixed in D8. For D7, you can write custom code to handle this.