code: def has_property(obj, name):
          
          if obj == None or name == None:
              return False
  
          names = name.split(".")
          if names == None or len(names) == 0: 
              return False
  
          return RecursiveObjectReader._perform_has_property(obj, names, 0)
docs: Checks recursively if object or its subobjects has a property with specified name.
  
          The object can be a user defined object, map or array.
          The property name correspondently must be object property, map key or array index.
  
          :param obj: an object to introspect.
  
          :param name: a name of the property to check.
  
          :return: true if the object has the property and false if it doesn't.