I think the precedence here (high->low) should be: _user_config, global_defaults, _widget_defaults.

The variables are perhaps poorly named: _user_config is the config explicitly specified for this widget, global_defaults are the defaults specified via widget_defaults in the config, and _widget_defaults are the defaults given in the widget's source, which should never take precedence over anything.