docs: def _genprop(converter, *apipaths, **kwargs):
      """
      This internal helper method returns a property (similar to the
      @property decorator). In additional to a simple Python property,
      this also adds a type validator (`converter`) and most importantly,
      specifies the path within a dictionary where the value should be
      stored.
  
      Any object using this property *must* have a dictionary called ``_json``
      as a property
  
      :param converter: The converter to be used, e.g. `int` or `lambda x: x`
          for passthrough
      :param apipaths:
          Components of a path to store, e.g. `foo, bar, baz` for
              `foo['bar']['baz']`
      :return: A property object
      """
      if not apipaths:
          raise TypeError('Must have at least one API path')
  
      def fget(self):
          d = self._json_
          try:
              for x in apipaths:
                  d = d[x]
              return d
          except KeyError:
              return None
  
      def fset(self, value):
          value = converter(value)
          d = self._json_
          for x in apipaths[:-1]:
              d = d.setdefault(x, {})
          d[apipaths[-1]] = value
  
      def fdel(self):
          d = self._json_
          try:
              for x in apipaths[:-1]:
                  d = d[x]
              del d[apipaths[-1]]
          except KeyError:
              pass
  
      doc = kwargs.pop(
          'doc', 'Corresponds to the ``{0}`` field'.format('.'.join(apipaths)))
      return property(fget, fset, fdel, doc)