The next thing on the list to do is to make a grapple gun that can move objects around in my world. The idea I have in mind is to take the angle of the 'gun' object, shoot a ray out from it and determine if it hits an object. If it hits a dynamic object that is 'grapple-able' (value configured via user data settings), project it out a certain distance away from the grapple gun to serve as an anchor point and then create a revolute joint between it and the gun. When the user decides to drop it, simply destroy the joint. The object should stay with the facing of the gun due to the joint.
There are a couple of unknowns -- whether the libgdx Box2D port supports raycasting (if it didn't, that would suck) and whether I need to have a joint as part of a fixture or if it's okay to let it hang in the air (I think it should be ok, but I need to experiment.)
I learned yesterday that the libgdx Box2D does NOT support contacts based on bodies (see section 9.3 of the Box2d manual.) You cannot do a myBody.getContactList(). The closest you can get is iterating over all of the world's contacts via myWorld.getContactList(). That sucks. To work around this, I implemented some contact array lists associated with specific objects whose elements either get removed from the list when acted upon or the endContact() method gets executed, otherwise they get re-checked on the next update iteration of the game step.