To elaborate on this for anyone winding up here, when you just call "Replace" you're getting Microsoft.VisualBasic.Replace, not the String.Replace you're expecting.
Microsoft.VisualBasic.Replace: https://learn.microsoft.com/en-us/dotnet/api/microsoft.visualbasic?view=netframework-4.7.2
String.Replace: https://learn.microsoft.com/en-us/dotnet/api/system.string.replace?view=netframework-4.7.2
If you want to return an empty string you need to call the .Replace method of a String:
dim myString as String = ""
myString.Replace("a", "b")
This of course finds no match, but the behavior is instead to return and empty string now instead of Nothing when the input expression is an empty String.