What about adding a jQuery-ish `nv.utils.extend`? Having such a function would allow

```
this.options = options || {};
this.options.size || (this.options.size = {});
this.options.margin || (this.options.margin = {});
this.options.noData = options.noData || 'No Data Available.';

var margin = this.margin = {
    top     : nv.utils.valueOrDefault(options.margin.top, 20),
    right   : nv.utils.valueOrDefault(options.margin.right, 20),
    bottom  : nv.utils.valueOrDefault(options.margin.bottom, 30),
    left    : nv.utils.valueOrDefault(options.margin.left, 40)
};
```

to be expressed as:
```
var defaults = {
	size: {}, 
	noData: 'No Data Available.',
	margin: {
		top: 20,
		right: 20,
		bottom: 30,
		left: 40
	}
}
this.options = nv.utils.extend({}, defaults, options);
```

Here's the one I use:
```
function extend(base) {
  if (base) {
    var extras = [].slice.call(arguments, 1);
    extras.forEach(function(extra) {
      for (var key in extra) {
        if (typeof base[key] === 'object' && typeof extra[key] === 'object') {
          // recurse
          extend(base[key], extra[key]);
        } else {
          base[key] = extra[key];
        }
      }
    }, this);
  }

  return base;
};
```

The name (`extend`, `mixin`, etc) doesn't matter as much as the utility.