Is that what you're after?
Local $string = "*** gzno(uà 156+ more garbage *** i'm would've O'Malley o'malley can't they'VE chance!"
Local $string2 = Execute('"' & StringRegExpReplace($string, "(?ix) (?| (O'[[:alpha:]]+) () | ([[:alpha:]]+'?) ([[:alpha:]]*))", '" & _StringProper("$1") & StringLower("$2") & "') & '"')
MsgBox(0, "", $string & @LF & $string2)
A little addition even handles McDonald's and even more McO'Tool's friend correctly(*):
Local $string = "*** gzno(uà mcdonald mco'tool mco'tool's friend mcdONald'S junk food 156+ more garbage *** i'm would've O'Malley o'malley can't they'VE chance!"
Local $string2 = Execute('"' & StringRegExpReplace($string, "(?ix) (?| (O'[[:alpha:]']+) () | (Mc) () (?=[[:alpha:]]+) | (?<=Mc) ([[:alpha:]]+) () | ([[:alpha:]]+'?) ([[:alpha:]]*))", '" & StringUpper(StringLeft("$1", 1)) & StringLower(StringTrimLeft("$1", 1)) & StringLower("$2") & "') & '"')
MsgBox(0, "", $string & @LF & @LF & $string2)
(*) Until a non-intuitive counter-example surfaces...