How does one usually go about this? Is this something that generally an artist has to do manually, or are there decent procedural methods (such as with normal mapping where one can look for gradients in the texture) to generate specular maps for textures?
An approach I've seen taken is to simply convert the diffuse texture map to grayscale, or copy one of its RGB channels, and then fuss with it a bit (for instance, altering the levels, inverting part or all of the image, etc.) This can be useful if the specularity is reasonably well correllated with the diffuse color.
It's still a manual process though; it's much faster than painting a new texture from scratch but still requires an artist's judgement as to how exactly to do it. I'm not aware of an automated process that can generate a reasonable spec map from any old diffuse map.
An alternative method for generating all sorts of maps is to use material layering. This takes a bunch of initial investment to get going, but can really pay off in productivity later. In this approach you don't paint the diffuse, normal, spec maps directly; instead you have a library of "pure" or "raw" materials and you paint a set of masks that control where different materials appear in the texture.
For example, in painting a brick texture, you'd have brick and mortar as raw materials, each with their own diffuse/normal/spec maps already set up; the spec map here might simply be a solid color or some homogeneous noise, as it represents a single material. Then you paint a mask that determines where brick and mortar appear, and use Photoshop or some other software to combine the raw material textures using the mask, generating diffuse/normal/spec maps for the brick wall.
Ready At Dawn is using this sort of approach for their new game and they gave a SIGGRAPH presentation about it: see "Crafting a Next-Gen Material Pipeline for The Order: 1886" from the Physically Based Shading course page.
However, this does require you to author your textures using this layering method from the beginning, so it's not easily applicable to existing textures that weren't created that way.