Not sure about the best or canonical solution but at least in DX behaviors I frequently use the following pattern:
It allows me to assign DX fields as property with custom getter/setter methods and in my case with fixed default values. I assume that you can extend the getter implementation easily with support for default methods.
There is likely something in the plone.supermodel - I remember having used a default method once but on the XML level of a model.
-aj