javascript property extractor optimisation
Here are some of my thoughts:


I don't see the point in providing the path as a dot separated string, but it may be useful in your application. 
If you keep the dot separated string, then you should consider extracting the recursive function into a separate internal function, so that you don't have to repeat the check of the path argument in each iteration. 
Why do you check for the shift method? If it doesn't exist, then your function will fail silently. The regular "method does not exist" exception would be much more useful. Instead implement the method on the Array.prototype yourself separately if it doesn't exist. 
Finally I would move the path.length == 0 to the start of the function. That is where the break condition of recursive functions are usually expected.