docs: function (args) {
              if (args.excludes === true) {
                  return;
              }
              var writer = args.writer;
              var out = writer.out;
              var varToNormalize = args.varToNormalize;
              var parentVars = args.parentVars;
              var beanDef = args.beanDef || ariaCoreJsonValidator.getBean(args.beanName);
              var typeName = beanDef['aria:baseType'].typeName;
              var isObject = (typeName == "Object");
  
              if (isObject) {
                  out.push('if (', varToNormalize, '==null) {', varToNormalize, '={};', '}');
                  var excludes = args.excludes || {};
                  varToNormalize = writer.createShortcut(varToNormalize);
                  var parentObjectVars = [];
                  var emptyObjectVar = args.emptyObjectVar;
                  if (emptyObjectVar == null) {
                      emptyObjectVar = writer.createTempVariable("{}");
                  }
                  var orEmptyObjectVar = '||' + emptyObjectVar;
                  for (var i = 0, l = parentVars.length; i < l; i++) {
                      parentObjectVars[i] = writer.createTempVariable(parentVars[i] + orEmptyObjectVar);
                  }
                  var properties = beanDef.$properties;
                  for (var propName in properties) {
                      if (properties.hasOwnProperty(propName)) {
                          var dotPropName = writer.getDotProperty(propName);
                          var newParentVars = [];
                          for (var i = 0, l = parentObjectVars.length; i < l; i++) {
                              newParentVars[i] = parentObjectVars[i] + dotPropName;
                          }
                          this.writeInheritanceNormalization({
                              writer : writer,
                              beanDef : properties[propName],
                              varToNormalize : varToNormalize + dotPropName,
                              parentVars : newParentVars,
                              emptyObjectVar : emptyObjectVar,
                              excludes : excludes[propName]
                          });
                      }
                  }
                  for (var i = 0, l = parentObjectVars.length; i < l; i++) {
                      writer.releaseTempVariable(parentObjectVars[i]);
                  }
                  writer.releaseShortcut(varToNormalize);
              } else {
                  var possibleValues = parentVars.slice();
                  if ('$strDefault' in beanDef) {
                      possibleValues.push(beanDef.$strDefault);
                  }
                  if (possibleValues.length > 0) {
                      out.push('if (', varToNormalize, '==null) {');
                      if (possibleValues.length == 1) {
                          out.push(varToNormalize, '=', possibleValues[0], ';');
                      } else {
                          for (var i = 0, l = possibleValues.length - 1; i < l; i++) {
                              var curValue = possibleValues[i];
                              if (i > 0) {
                                  out.push("} else ");
                              }
                              out.push("if (", curValue, "!=null){", varToNormalize, '=', curValue, ';');
                          }
                          out.push('} else {', varToNormalize, '=', possibleValues[possibleValues.length - 1], ';}');
                      }
                  }
                  out.push('}');
              }
          }