I don't have much to add to this thread other than I have always used "arping -U" (request) or "arping -A" (reply) to update my ISP's router arp cache when I changed NIC's (I have a static public IP).
FWIW: The redhat ifup script issues a gratuitious arp when the interface is brought up
Code:
# update ARP cache of neighboring computers
arping -q -A -c 1 -I ${REALDEVICE} ${IPADDR}
( sleep 2;
arping -q -U -c 1 -I ${REALDEVICE} ${IPADDR} ) > /dev/null 2>&1 < /dev/null &
Also, using the windows based version of ethereal, windows clients also issue some form of an arping when the interface is brought up. At least thats what I have observed on my XP box.
Good Luck