If you're willing to live with octagonal soldermasks on your vias, then try the following:
- Define the SMD ground pad, and disable the stop mask.
- Place pads where you want your vias. Make the pads have the same characteristics as the vias you want. We will delete these pads later.
- Show the soldermask layer (tStop)
- Draw a polygon on the tStop layer in strips. This is to prevent your polygons from enclosing any area, and so that it's easier to draw. If you want a 3x3 grid of vias, then you would need four polygons.
- Delete pads used as a template. The package is now done.
- Place package in layout
- Place vias
- Use the "NAME" function to change the via net to the same net as the pad - probably "GND"
- Route vias / add pour
After this, you will have the vias on the correct net, and your soldermask will come out as you wanted. The drawbacks that I see are:
- The vias must be manually placed in the final board
- Each via must be renamed to the target net (I couldn't get the GROUP function to work).
- The soldermask is an octagon instead of a circle
- There isn't an automatic way to draw the STOP mask for the package
- Each via gives an overlap error in DRC (can be ignored).
- No easy way for a STOP mask on the bottom side without drawing it manually
I was able to get this to work using Eagle 5.1 in about 15-20 minutes, so not too bad.