def METHOD_NAME(cls, type, properties, version, base_class, id_contrib_props=None):
    if id_contrib_props is None:
        id_contrib_props = []
    prop_dict = _get_properties_dict(properties)
    class _CustomObservable(cls, base_class):
        _type = type
        _properties = prop_dict
        if version != '2.0':
            _id_contributing_properties = id_contrib_props
        def __init__(self, **kwargs):
            base_class.__init__(self, **kwargs)
            _cls_init(cls, self, kwargs)
            ext = getattr(self, 'with_extension', None)
            if ext and version != '2.0':
                if 'extensions' not in self._inner:
                    self._inner['extensions'] = {}
                self._inner['extensions'][ext] = class_for_type(ext, version, "extensions")()
    _CustomObservable.__name__ = cls.__name__
    _register_observable(_CustomObservable, version=version)
    return _CustomObservable