code: function parseStringPropertyPath(propertyPath) {
              //jshint maxcomplexity:13
              //jshint maxdepth:3
              //REASON: taken from https://github.com/marklagendijk/lodash-deep/blob/master/lodash-deep.js
              //        Need to look at refactoring it.
              var character = '';
              var parsedPropertyPath = [];
              var parsedPropertyPathPart = '';
              var escapeNextCharacter = false;
              var isSpecialCharacter = false;
              var insideBrackets = false;
  
              // Walk through the path and find backslashes that escape periods or other backslashes, and split on unescaped
              // periods and brackets.
              for (var i = 0; i < propertyPath.length; i++) {
                  character = propertyPath[i];
                  isSpecialCharacter = (character === '\\' || character === '[' || character === ']' || character === '.');
  
                  if (isSpecialCharacter && !escapeNextCharacter) {
                      if (insideBrackets && character !== ']') {
                          throw new SyntaxError('unexpected "' + character + '" within brackets at character ' + i + ' in property path ' + propertyPath);
                      }
  
                      switch (character) {
                          case '\\':
                              escapeNextCharacter = true;
                              break;
                          case ']':
                              insideBrackets = false;
                              break;
                          case '[':
                              insideBrackets = true;
                              /* falls through */
                          case '.':
                              parsedPropertyPath.push(parsedPropertyPathPart);
                              parsedPropertyPathPart = '';
                              break;
                      }
                  } else {
                      parsedPropertyPathPart += character;
                      escapeNextCharacter = false;
                  }
              }
  
              if (parsedPropertyPath[0] === '') {
                  //allow '[0]', or '.0'
                  parsedPropertyPath.splice(0, 1);
              }
  
              // capture the final part
              parsedPropertyPath.push(parsedPropertyPathPart);
              return parsedPropertyPath;
          }
docs: /* istanbul ignore next