Most (if not all) of the solutions posted don't deal well with words with internal punctuation, and/or leading punctuation. This does. (Though it will still fail for hyphenated names like Pratt-Whitney... but I can't see any easy way to discern them from regular hyphenated words.)
#! /usr/bin/perl
use warnings;
use strict;
while (<DATA>) {
$_ = lc $_;
s/(^| )(\p{Punct}*)(\w)/$1$2\U$3/g;
print;
}
__DATA__
THIS iS a Text IN TITLE CASE
"THIS IS A 'TEST' CASE"
JOE MARCONES
JOE'S COMPANY
holy s**t, batman!
how about PARENTHETICAL TEXT (LIKE this.)