 
     // MARK: Decodable Parsing Methods
 
-    // TODO: Add docstring
+    /**
+        Parses json data at the specified key path into an object of type `T`. `T` must implement the `Decodable` protocol.
+    
+        - parameter data:       An NSData object containing encoded json data.
+        - parameter forKeyPath: The json key path identifying the object to be parsed.
+    
+        - throws: ParserError.Deserialization and ParserError.Validation
+        - returns: The parsed object
+    */
     public class func parse<T: Decodable>(data data: NSData, forKeyPath keyPath: String) throws -> T {
         let properties = try Parser.parseProperties(data: data) { make in
             make.propertyForKeyPath(keyPath, type: .Dictionary, decodedToType: T.self)

        return (properties[keyPath] as! [Any]).map { $0 as! T }
    }

    public class func parse<T>(data data: NSData, forKeyPath keyPath: String, withDecoder decoder: Decoder) throws -> T {
        let result = try Parser.parseProperties(data: data) { make in
            make.propertyForKeyPath(keyPath, type: .Dictionary, decoder: decoder)

        return properties[keyPath] as! T
    }

    /**
        Parses json data at the specified key path into an array of objects of type `T`. `T` must implement the 
        `Decodable` protocol.

        - parameter data:       An NSData object containing encoded json data.
        - parameter forKeyPath: The json key path identifying the object to be parsed.

        - throws: ParserError.Deserialization and ParserError.Validation
        - returns: The parsed array of objects
    */
    public class func parse<T: Decodable>(data data: NSData, forKeyPath keyPath: String) throws -> [T] {
        let properties = try Parser.parseProperties(data: data) { make in
            make.propertyForKeyPath(keyPath, type: .Array, decodedToType: T.self)
