When you are porting an old system you will often be confronted with the pragmatic decision to be bug-by-bug compatible with the old system at the integration points, since it is sometimes not feasible to fix the bugs in the clients to the system.
On the other hand, we have the principle of "Don't propagate a bad decision."
So the proper way to do it is two-fold:
We separate the two concerns:
First, we write the correct version of the new system. Then, we add a layer that is capable of introducing the bugs at the proper places. This way it is easy to locate the errors later as we upgrade
So you might have the correct IWidgetService implemented as WidgetService. Then, we also construct a BugCompatibleWidgetService that wraps WidgetService and implements IWidgetService. This, then, is the component we register in our application.
Thus we don't propagate the bad decision and keep a separation of concerns: one module that works and one responsible for breaking the result in a predictable manner.