Ciao,
Oggi stavo faccendo proprio quello che avevi bisogno.
Bastava guardare nella documentazione del script.aculo (vedi functional test: dragdrop6.html)
codice:
<div class="padre" id="padre" style="background: url(griglia.jpg) no-repeat top left; height:482px; width:373px; border:1px solid black; margin:0px; padding:0px;">
  <div id="box1" class="box1" style="z-index:1000;width:150px;height:150px;background:#bbf;">
  Trascinami
</div>
<script type="text/javascript" language="javascript" charset="utf-8">
// <![CDATA[
  new Draggable('box1',{
    snap: function(x,y,draggable) {
      function constrain(n, lower, upper) {
        if (n > upper) return upper;
        else if (n < lower) return lower;
        else return n;
      }

      element_dimensions = Element.getDimensions(draggable.element);
      parent_dimensions = Element.getDimensions(draggable.element.parentNode);
      return[
        constrain(x, 0, parent_dimensions.width - element_dimensions.width),
        constrain(y, 0, parent_dimensions.height - element_dimensions.height)];
    },
    revert:true
  });
// ]]>
</script>