Here's what I would propose. Without something like this, downstream clients may break (like python-glanceclient will):

diff --git a/warlock/core.py b/warlock/core.py
index 0165070..44771e2 100644
--- a/warlock/core.py
+++ b/warlock/core.py
@@ -14,7 +14,8 @@ def model_factory(schema, base_class=model.Model):
 
     class Model(base_class):
         def __init__(self, *args, **kwargs):
-            base_class.__init__(self, schema, *args, **kwargs)
+            self.__dict__['schema'] = schema
+            base_class.__init__(self, *args, **kwargs)
 
     Model.__name__ = str(schema['name'])
     return Model
diff --git a/warlock/model.py b/warlock/model.py
index db2eb8f..15228f7 100644
--- a/warlock/model.py
+++ b/warlock/model.py
@@ -9,9 +9,7 @@ import exceptions
 
 
 class Model(dict):
-    def __init__(self, schema, *args, **kwargs):
-        self.__dict__['schema'] = schema
-
+    def __init__(self, *args, **kwargs):
         # we overload setattr so set this manually
         d = dict(*args, **kwargs)