Touching occurs on the server only and results in calls to the
Touch(CBaseEntity* pOther) functions of both entities involved.
There is however no known call into entity code when deciding whether a touch should occur. The closest it gets is
CCollisionProperty::ShouldTouchTrigger(), but as the name suggests that only applies to trigger touches. Other functions in game code deal only with collision groups; the guts of the system seem to be locked away in the engine.
To make an entity touch others without colliding with them, call
AddSolidFlags( FSOLID_NOT_SOLID | FSOLID_TRIGGER ).