The basic formula for achieving it can be found at https://developers.google.com/maps/documentation/javascript/maptypes#PixelCoordinates
pixelCoordinate = worldCoordinate * 2 zoomLevel
Get click worldCoordinate, calculate pixelCoordinate, add offset, calculate new worldCoordinate and you have the desired position.
You will need two functions to convert LatLng to pixel (and vice versa):
fromLatLngToPoint() and fromPointToLatLng()
sampling function:
google.maps.event.addListener(map, 'click', function(e){
var
anchor = new google.maps.Point(11,40),
proj = this.getProjection(),
pos = e.latLng;
power = Math.pow(2,map.getZoom()),
point = proj.fromLatLngToPoint(pos),
offsetPoint = new google.maps.Point(
(point.x*power+anchor.x)/power,
(point.y*power+anchor.y)/power
),
offsetPosition = proj.fromPointToLatLng(offsetPoint);
new google.maps.Marker({ position:offsetPosition, map:map});
});
: http://jsfiddle.net/doktormolle/NYh7g/