There is a note regarding the CoerceValueCallback not working on default values. The note reads:
NOTE:
Default values of properties are not coerced. A property value equal to the default value might occur if a property value still has its initial default, or through clearing other values with ClearValue.
I found this not to be the case from my testing. I tested using a default value for string dependency property. I also tested using ClearValue. I'm not sure if other types do not get the call back on default but it is working with strings. Perhaps they have corrected this?