Extend the Serial class at compile time?

I think that's a mistake. You're printing to the globally defined instance named Serial, instead of printing to this instance of HardwareSerial.

Since the global variable Serial has already been declared and defined, you can't change its type (i.e. from HardwareSerial to ScottSerial) unless you change the library that defines it.

The closest you can sensibly get is to define a subclass of HardwareSerial that acts as a proxy for a HardwareSerial and then define your own global instance of that subclass that wraps the Serial object. In order to have it act as a proxy you would need to provide implementations of all the public methods exposed by HardwareSerial that delegate the call to the underlying HardwareSerial.

Of course you do have the option of using a #define Serial MyExtendedSerial to make user code that appears to use Serial actually use your global proxy instead, although personally I wouldn't recommend it. I think that if people are going to code to an extended API it is reasonable for their code to reflect that, rather than try to pretend that the behaviour of the 'standard' API is no longer standard.