As per spec and to retain FileDescriptorProto's canonical nature, protoc should validate, but not make the FieldDescriptorProto's default value different form the original proto. Also, in Java if one manually creates FileDescriptorProto, its defaults are not changed. Different languages do the conversion of the defaults differently, so the produced/serialized protos will be different.
In addition, to make things more canonical/compatible across different language realms, it makes things easier, easier/faster to process, and much easier to implement/maintain.