docs: def validate(self, schema=None):
          """
          Validate that we have a valid object.
  
          On error, this will raise a `ScrapeValueError`
  
          This also expects that the schemas assume that omitting required
          in the schema asserts the field is optional, not required. This is
          due to upstream schemas being in JSON Schema v3, and not validictory's
          modified syntax.
          ^ TODO: FIXME
          """
          if schema is None:
              schema = self._schema
  
          type_checker = Draft3Validator.TYPE_CHECKER.redefine(
              "datetime", lambda c, d: isinstance(d, (datetime.date, datetime.datetime))
          )
          ValidatorCls = jsonschema.validators.extend(Draft3Validator, type_checker=type_checker)
          validator = ValidatorCls(schema, format_checker=FormatChecker())
  
          errors = [str(error) for error in validator.iter_errors(self.as_dict())]
          if errors:
              raise ScrapeValueError('validation of {} {} failed: {}'.format(
                  self.__class__.__name__, self._id, '\n\t'+'\n\t'.join(errors)
              ))