I think you raise a very valid point. What surprises me is that I don't remember AR acting up this way in older versions. Am I correct? Regardless... this is not an acceptable behavior. Defaults should be set at the table definition level if needed, not provided automagically w/o the option of preventing this behavior.
As you pointed out, this renders validates_presence_of useless in many cases.
Dado