code: function registerCustomKeywords(ajv) {
      //register $desc - aka. property description keyword
      ajv.addKeyword('$desc', {
          schema: false,
          valid: true,
          metaSchema: {
              type: 'string'
          },
      });
  
      //$toJSON keyword tries to coerce valid JSON data
      ajv.addKeyword('$toJSON', {
          modifying: true,
          statements: true,
          valid: true,
          metaSchema: {
              type: 'object'
          },
          validate: function(schema, data, parentSchema, dataPath, parentData, prop) {
              if (   typeof data === 'object'
                  && data !== null
                  && typeof data.toJSON === 'function'
                  && parentData
              ) {
                  parentData[prop] = data.toJSON();
              } else if (typeof data === 'string') {
                  parentData[prop] = JSON.parse(data);
              }
          }
      });
  
      //type: 'string',
      //format: 'media-type'
      ajv.addFormat('media-type', function(val) {
          try {
              mimeTyper.parse(val);
              return true;
          } catch(e) {
              return false;
          }
      });
  
      return ajv;
  }
docs: adds `$desc` & `$toJSON` schema keywords to Ajv validator
  @function registerCustomKeywords
  @memberof Utils
  @static
  @example
  require('bi-service').utils.registerCustomKeywords(ajv)
  
  @param {Ajv} ajv - validator instance
  @return {Ajv}