You are mixing two types of keys here: defaults in config file use camel-case, defaults in definitions use dashed names. Also if the config file does not contain any record for an option (let's say because the option was added in a later version), then your defaults will be incorrect.

Maybe we misunderstood each other about the naming conventions. IMO the best (and simplest) scheme is this one:
- config.json uses camel-case names only (this preserves compatibility with older installations)
- command-line arguments and RC files use dashed names only (this is the new way for the future)

In which case, the code could look like this:

```javascript
var defaults = {};
Object.keys(definitions).forEach(function(key) {
  defaults[key] = definitions[key].defaults;
});

// parse config.json and update defaults with values there. apply keyToCamelKey conversion 
var loaded = // load config.json, probably rename 'loaded' to something more meaningful
Object.keys(defaults).forEach(function(key) { 
  var val = loaded[conversions.keyToCamelKey(key)];
  if (val !== undefined)
    defaults[key] = val;
});
```

Please extract the code for getting default values into a named top-level function. Also don't use `map` for iterating over items, there is `forEach` for that.