The issue is arising from the fact that I need to specify a specific implementation of TraitA for example <StructA as TraitA> however StructA might possibly overwrite the default new implementation in TraitA. So I'm wondering about how should I properly write this code?
There's no way to call the default method body specifically, you have to call the method of some implementation. You can create a dedicated implementing type for this purpose of needed.
I would say the most proper thing to do is to not make this an associated function. Functions related to a trait which return specific implementations of a trait should be free functions in the relevant module, instead. (The standard library follows this; for example, std::iter::repeat() and std::future::ready().)