**For first:**
* **defs[option].desc** is needed for command 'help' as source of description
* **defs[option].convert** - for check the type  of variable (from README of rc module:"Since ini, and env variables do not have a standard for types, your application needs be prepared for strings") 
* **defs[option].default** - for collect the defaults 
All of the list is optional, also delegating of [options] is optional 

**For second**
I see one correct way to save compatibility - rewrite old config automatically:
```javascript
if(!process.argv.some(function(arg){return /^-*config$/.test(arg)})){/*if no other path to config.json*/
  var pathToConfig = path.join(__dirname,'../config.json'),
      oldConfig, newConfig;
  try{/*try read default config.json*/
    oldConfig = JSON.parse(fs.readFileSync(pathToConfig));
    newConfig = {};
    Object.keys(defs).map(function(key){/*search for predefined options and replace them*/
      var camelKey = key.replace(/-(.)/g,function(_,lower){return lower.toUpperCase()});
      (oldConfig[camelKey] !== undefined) && (newConfig[key] = oldConfig[camelKey]);
    });
    fs.writeFileSync(pathToConfig,JSON.stryngify(newConfig));
  }
  catch(e){}  
  process.argv = process.argv.concat(['--config',pathToConfig]);
}
```