This has been mentioned in these 3 github issues and looks like it may get rectified in a future version.
Just noting the potential for this confusion was brought up when we added the regex parameter, though it didn’t generate much discussion: #16808 (comment)
At the time I noted that changing this behavior would break back-compat (since the undocumented behavior that had been there since the beginning was literal replacement for 1-character strings and regex replacement for >1 character strings).
I’m totally on board with changing either the documentation or the behavior to be more consistent, but it definitely needs a deprecation cycle as suggested by @TomAugspurger. The behavior of .str.replace(’.’, ‘’) without regex specified to replace periods, rather than every character, has been constant since at least <=0.16.