code: def _handle_func(self, value, rule, path, done=None):
          
          func = rule.func
  
          # func keyword is not defined so nothing to do
          if not func:
              return
  
          found_method = False
  
          for extension in self.loaded_extensions:
              method = getattr(extension, func, None)
              if method:
                  found_method = True
  
                  # No exception will should be caught. If one is raised it should bubble up all the way.
                  ret = method(value, rule, path)
                  if ret is not True and ret is not None:
                      msg = '%s. Path: {path}' % unicode(ret)
                      self.errors.append(SchemaError.SchemaErrorEntry(
                                      msg=msg,
                                      path=path,
                                      value=None))
  
                  # If False or None or some other object that is interpreted as False
                  if not ret:
                      raise CoreError(u"Error when running extension function : {0}".format(func))
  
                  # Only run the first matched function. Sinc loading order is determined
                  # it should be easy to determine which file is used before others
                  break
  
          if not found_method:
              raise CoreError(u"Did not find method '{0}' in any loaded extension file".format(func))
docs: Helper function that should check if func is specified for this rule and
          then handle it for all cases in a generic way.