Actually a mixture of both posts is correct.
Firstly, bullets in BF42 have travel time. This is apparent in single player, on a lan, anywhere.
HOWEVER, there is the first bug - even tho bullets have travel time, DAMAGE-wise... graphically, the bullet 'puff' of dust hitting the ground or whatever is rendered INSTANTLY as you fire. No travel time. It appears instantly. Even miles away. A few seconds later the invisibile 'bullet' hits that spot.
SECONDLY
When you have latency (ping, lag, whatever), they still draw the puff of dust, play the guns sound effect (BLAM!) and the muzzle flash -INSTANTLY- even though the packet takes some time to reach the server. In fact, they even play the puff of dust or sparks or whatever on the ground or vehicle you're shooting at, INSTANTLY, again, with no travel time.
HOWEVER
The server only creates the invisible 'bullet' of actual DAMAGE when your packet arives, some time later. And -that- has travel time, compounding the problem.
This is why you can press the muzzle of your gun AGAINST SOMEONES CHEST (negating any travel time whatsoever), keep it there while they circle around you (Try it on an internet game with ~100 ping), have a friend circle around you slowly enough for you to keep pointed at him... or just have him move across your field of vision...
... and you can empty a clip at him. What happens? The gun 'appears' to fire instantly. In fact, puffs appear on his BODY, etc...
Yet by the time the invisible bullet of actual damage, not just graphic effect is created on the server, he has moved on. and it misses. No damage caused.
THIS is what makes it feel so flakey and broken.
Games with PROPER netcode like Half-Life's CounterStrike, etc, when it comes time to create the invisible 'bullet' of damage, actually project it back in time, seeing 'where eveyrone was' when you pulled the trigger, and score a hit or miss appropriately so the graphical blood or puff matches with what people see.
In other words, BF42 is half assed when it comes to one of the most important things in a shooter - lagcomp + hit detection.
Its actually WORSE to play effects on the client side that do not match whats really happening, than it is to not predict effects at all.