docs: function prop(dest, pd, src, isrc, ndflt, nm, nmsrc) {
      if (nm && src) {
          assert.strictEqual(dest[pd.n], src[pd.n], (nm ? nm + '.' : '') + pd.n + ': ' + dest[pd.n] + ' !== ' + 
              (nmsrc ? nmsrc + '.' : '') + pd.n + ': ' + src[pd.n]);
      } else {
          var dtyp = (dest && typeof dest[pd.n]) || '', vtyp, v, useObj = pd.v && Array.isArray(pd.v);
          if (dtyp === 'undefined') v = (src && (isrc || pd.i) && (!useObj || typeof src[pd.n] === 'object') ? src[pd.n] : null) || (ndflt ? undefined : pd.d);
          else if (!useObj && dtyp === 'number') v = typeof pd.l === 'number' && dest[pd.n] < pd.l ? pd.l : typeof pd.h === 'number' && dest[pd.n] > pd.h ? pd.h : undefined;
          else if (useObj && dtyp === 'object') v = props(dest[pd.n], pd.v, src[pd.n], isrc, ndflt, nm, nmsrc);
          if ((vtyp = typeof v) !== 'undefined' && (!pd.r || !!~pd.r.indexOf(v))) {
              if (!pd.c || (vtyp === typeof pd.c && Array.isArray(pd.c) === Array.isArray(v))) dest[pd.n] = v;
          }
      }
      return dest;
  }