code: def customProperties(self):
          
          rval = {}
          if len(self.content_types.getPathsForContentType(contenttypes.CT_CUSTOM_PROPS)) == 0:
              # We may have no custom properties at all.
              return rval
          XPath = lxml.etree.XPath # Class shortcut
          properties_xpath = XPath('custom-properties:property', namespaces=ns_map)
          propname_xpath = XPath('@name')
          propvalue_xpath = XPath('*/text()')
          for tree in self.content_types.getTreesFor(self, contenttypes.CT_CUSTOM_PROPS):
              for elt in properties_xpath(tree.getroot()):
                  rval[toUnicode(propname_xpath(elt)[0])] = u" ".join(propvalue_xpath(elt))
          return rval
docs: Document custom properties added by the document author.
  
          We canot convert the properties as indicated
          with the http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes
          namespace
  
          :return: mapping of metadata