     public func extract<T : NodeInitializable>(
         path: [PathIndex])
         throws -> [String : T] {
-            guard let object = self[path]?.nodeObject else {
-                throw NodeError.unableToConvert(node: .null, expected: "\([String: T].self)")
-            }
-
+            let value = self[path] ?? .null
+            guard let object = value.nodeObject else {
+                throw NodeError.unableToConvert(node: value, expected: "\([String: [T]].self)")
+            }
             return try object.mapValues { return try T(node: $0) }
     }
 

extension Dictionary {
    func mapValues<T>(_ mapper: @noescape (value: Value) throws -> T)
        rethrows -> Dictionary<Key, T> {
        var mapped: [Key: T] = [:]
        try forEach { key, value in
            mapped[key] = try mapper(value: value)
        }
        return mapped
    }
}


    public func extract<T : NodeInitializable>(
        path: [PathIndex])
        throws -> [String : [T]]? {
            guard let value = self[path] else { return nil }
            guard let object = value.nodeObject else {
                throw NodeError.unableToConvert(node: value, expected: "\([String: T].self)")
            }
            return try object.mapValues { return try [T](node: $0) }
    }

    public func extract<T : NodeInitializable>(
