How can stipple shading be replicated in Blender?
This is a procedural shader-only approach, which could be adapted to taste. It's based on capturing the light-response of a surface as a color, and deciding on a set of threshold values in its brightness. For each threshold, darker tones are uniformly textured with procedural dots. The resulting textures are layered over one another, so tones below the minimum threshold get all the layers, the second-lowest all but one, and so on.

Create a 'Stipple Layer' node-group which will texture everything below a given brightness with procedural dots.




The Dot Density node is a relabeled Voronoi texture: the larger its scale, the further apart the dots.
The Dot Size node is a relabeled  Math > Greater than node: it determines the internal threshold on the Voronoi texture. Below the threshold, the dot will be Dot Color, above it, white.
The Threshold node is the external threshold value. Below it, there will be dots, above it, white.


Suzanne's eye trough a single one of these groups would look something like this, depending on the settings:



Now to layer them up.




Suzanne is shaded with a diffuse shader, and then the color extracted trough a Shader to RGB node. This means you must be in EEVEE, or just tap the color out after shading in Blender Internal, pre-2.8. Cycles doesn't know what the color of a surface is, until all the rays have been integrated at the end of rendering. Too late for us. 
The RGB Curves node allows overall adjustment of brightness and contrast. 'Brightness EQ'
Unless each Stipple Layer group gets its own Mapping node, all the dots in the layers would be exactly over one another, so there would be no shading. Each mapping node is set to translate the texture by some arbitrary long way, so the lookup comes from different places in texture space.
Each layer darkens the next, so the dark dots accumulate over the white background.


The result of 4 layers:



By tweaking the dot sizes, densities, and thresholds, the boundaries between the layers can be disguised quite well. You can add an Ambient Occlusion shader to feed a layer, and intensify crevices, if you like:



You could also for example, split out your own R,G,B, and (probably) brightness channels to do a home-brewed color separation... lots of options.

The  Dot Size and Dot Density entries interact: If you adjust one, you have to adjust the other to compensate. You could perhaps automate that relationship? : I tried a simple division - it wasn't quite linear, and wound up being easier to adjust by hand.

Suggestions for improvement welcome.

Edit: I've expanded the group a little to include more options:

]6


An upper and a lower threshold of input tone for a stipple layer
'Dot Background': a background color for the zone between the thresholds
'Layer Background': a background color for the zone outside the thresholds


These allow the possibility, for example, of negative layers (white dots out of black).



Version 1:


Version2: