There actually aren't that many 'walkers' around. The method i use for my kittens & spiders is:
I use an llMoveToTarget(target) to set the movement.
In a a rather tight timer loop. I basically do this:
llStopMoveToTarget() --> the object starts dropping to the ground
llSleep(SOME_TIME); --> let it drop for a while
llMoveToTarget(target) --> start moving again
Next to that...i use a Z coord. corrector function once in a while. (Every 10 iters or so) This will make sure the targets Z coord is based on the current 'floor' (this is not the llGround() level! )
This is basically a while loop functions that keep the object falling, until the object no longer moves in the z direction (apparently it hit the floor level), and sets the z value accordingly.
It's crude, but it works... it will give a form of bumpy walk.
I tried several llPush'es and llSetForce's to get a more natural walk, but the end results aren't reliable in Havok 1. (Your pet will end up jumping fences and do weird stuff)
But i guess this way of movement would be more suitable for a C-3PO...
Oh...
for the R2D2... just look in a basic follower script for the llMoveToTarget(target) line...
Probably something like:
vector target = llDetectedPos(0);
llMoveToTarget(target + <1,1,1>

;
The <1,1,1> value is the offset from your avie. Basically the distance in meters using the x,y,z axis.
The trick is changing the <1,1,1> to move lower to the ground...
Probably something like <1,1,-1> could work, experiment with that value.