Thanks for your investigation. When I looked in my browser's network pane, I noticed that although I wasn't getting the ajax response back, I Was getting a redirect in the background. I suspected it was S2member's redirect hooks that was short-circuiting the return for the ajax call. My solution was to implement an S2-hack to disable redirects, which did the trick. Everything is working smooth now. The hack is below:
/* Need this since the S2Member redirect messes with the redirect from WP Modal Login */
add_filter("ws_plugin__s2member_login_redirect", "my_custom_login_redirect", 10, 2);
function my_custom_login_redirect($redirect, $vars = array())
// If you want s2Member to perform the redirect, return true.
// return true;
// Or, if you do NOT want s2Member to perform the redirect, return false.
// Or, if you want s2Member to redirect, but to a custom URL, return that URL.
// return 'http://www.example.com/reset-password-please/';
// Or, just return what s2Member already says about the matter.
@therandomguy12345 Thanks for your help too!