Since Javascript doesn't support lookbehinds, you'll have a much easier time going through exactly the function you've written and then arbitrarily correcting the mistakenly capitalized bits back to lowercase.
Working example:
String.prototype.capitalize = function(exception) {
var result = this.replace(/.+?[\.\?\!](\s|$)/g, function (txt) {
return txt.charAt(0).toUpperCase() + txt.slice(1);
});
var r = new RegExp(exception + "\\.\\s*\(\\w+\)", "i");
return result.replace(r, function(re) { return(re.toLowerCase()) });
};
alert("capitalization of string xy. is not correct.".capitalize("xy"));
You probably could enhance it to handle an array of exceptions, or even use a regular expression.
Here's a working example: http://jsfiddle.net/remus/4EZBb/