A resistive probe for 20MHz would be trivial, just a piece of 50ohm coax with a resistor on the end and some tip/ground connection would probably be good to a few hundred MHz. The hard part would probably be the mechanical part, you want it reasonably sturdy, a soft resistor lead will break soon.
If you're going the DIY probe route, I'd also consider how to attach to modern devices. I find the old retractable hook and minigator fairly useless for modern fine-pitch SMD devices, I'd make 0.025" sockets and use E-Z-hook-style clips (like the Saleae Logic uses). You want to minimize inductance, so keep the leads as short as possible (no 30cm leads), and put a pin (maybe a pin from a gold-plated 100mil SIP connector?) in the socket for hand-held use. Like the Tektronix P6561 or P6243.
You can also connect any source with a 50ohm output directly to the input.
The disadvantage of resistive probes is the low impedance at DC and low frequencies. At higher frequencies, the input capacitance dominates: a 10Mohm passive 10x probe with 10pF capacitance, which is quite good, has an impendace of 160ohm at 100MHz, and 800ohm at 20MHz. This makes the parallel 10Mohm resistance completely irrelevant. A 1x 1Mohm probe usually has an order of magnitude more capacitance, which explains why they're useless for anything remotely high-frequency. A resistive probe might be 500-5000ohm // 1pF. The low resistance means high loading at DC (500ohm vs. 10Mohm), but lower at higher frequencies (still 325ohm at 100MHz).
A 10x resistive probe would be about 500ohm, a 100x probe would be 5000ohm, and you can obviously use any value in between. Nice round values are easy to work with, although this can be compensated in software. A 100x probe requires a very sensitive amplifier, a 1.8V signal will become only 18mV, so you would probably need to stick to a 10x or 20x probe. I have no idea how slow digital digital circuits react to a 500ohm load, it would draw 10mA from a 5V signal, which is often about the max for many chips. Resistive probes work great for fast digital circuits, which need a low output impedance to get the slew rate necessary for that 3GHz bus, so they don't mind a few mA extra. Some smart people like Howard Johnson (you already linked to his website) and Doug Smith (has instructions for a restive probe to 1GHz) really like resistive probes, but I'm not sure if they're the right choice for your average 8-bit micro and 74HC logic.
It's basically the law of conservation of misery: you either make it 50ohm, simplify the front-end, but make the probes more difficult (either low DC resistance or FET probe, which are more complex and expensive), or you use off-the-shelf probes but have a more complex front-end.
Disclaimer: I've done a fair bit research in digital oscilloscopes, and my conclusion was that all PC-based oscilloscopes are basically crap compared to entry level stand-alone oscilloscopes (like the Rigol DS1000D/E and Tektronix TDS1xxx series), unless you pay more than the price of an entry level DSO. If I wanted a cheap scope, I'd look for a used 50-100MHz analog scope. Still, I try to offer some ideas to make this as useful as possible. Your advantage over a $50-$100 used analog scope would be price(?), digital storage and size. I'm going to offer some ideas, and you're going to tell me that that's completely unrealistic for a hobby project, but it might help you along.
Something about bandwidth (most of this is in the already posted Agilent appnote). The rule-of-thumb for analog signals is that the analog bandwidth of the scope should be about five times larger than your signal frequency to get a reasonable representation (even more for accurate measurements). Note that the analog bandwidth is the -3dB point of the front-end amplifier. At the specified bandwidth, your signal amplitude will be 40% lower than the input signal.
For digital signals, you should be looking at rise times, not clock frequencies. An 8MHz digital signal (period = 125ns) might have a rise time of about 10ns. To display a 25ns rise time, you need 0.35/10ns = 35MHz of analog bandwidth. This will only let you see the rising edge with a 40% uncertainty, to get an accurate view of the rising edge, you need even more bandwidth. If you observe a 20MHz clock signal with a 20MHz scope, you will only see an attenuated sine wave, and none of the overshoot, ringing or glitches that may be present. You use the scope to see actual details like rise times, glitches or overshoot. If you only wanted to see the bits, you'd use a logic analyzer. See also this link about bandwidth and rise times.
The bottom line is that you never have enough bandwidth, and 20MHz is barely enough for even 8-bit micro work, not to mention FPGA's. Commercial scopes start at about 60-100MHz. I'm not saying this is a realistic target for this project, but 20MHz is definitely not overkill. You should think of bandwidth in the frequency domain, i.e. the highest component in the Fourier analysis, not just the period.
Sample rate is independent of analog bandwidth, the are scopes with a 20GHz bandwidth but a 100kS/s sample rate, and there are scopes with a 60MHz bandwidth and a 1GS/s sample rate. The basic rule-of-thumb is sample rate should be ten times larger than the bandwidth. The reason that you can't just apply the Nyquist-Shannon theory is that the Nyquist frequency is two times the highest frequency component. A 20MHz amplifier will also let through signals above 20MHz, just attenuated (about 6dB/decade if I remember correctly for Gaussian roll-off). This means that there will be some 40MHz and 60MHz components, which would screw up your interpolation if you were sampling at just twice the bandwidth. On the higher end, scope manufacturers sometimes cheat with just five times the analog bandwidth as sample rate, but these usually have a sharper roll-off (as on page 2 of the Agilent appnote). I'd go for ten times the analog bandwidth to keep the filter and interpolation simple.
There's a trick called equivalent time sampling to compensate for slow ADC's. It was used in the first DSO's when no fast ADC's were available, and it's used in the really fast scopes (above 20GHz or so). What you do is sample a periodic waveform at a random time, so you get a different part each time. You combine all these samples to get one waveform. You still need a good timing resolution to do this, and it only works for repetitive signals. I wouldn't attempt this, but it is a workaround for slow ADC's. Here is an example of that.
To look at the 8MHz signal, you needed 35MHz bandwidth, so you want to sample at 350MS/s. This why even (good) entry-level scopes sample at 1GS/s. So a 100MS/s scope would probably be usable for max. 2MHz signals if you want a reasonable level of detail.
Memory is the third important parameter, with a low sample rate, memory is cheap. The entry level Tektronix stuff is 2.5kpoints/channel, more is better.
It would be very useful if logic analyzer channels and the scope channel could be used at the same time, synchronized on the same timebase. This is what the current mixed-signal oscilloscopes do. Not sure if the FPGA has enough resources for this.
I haven't heard anyone about triggering. You want at least level triggering good to the analog bandwidth (20MHz?). Other types like pulse triggering would be cool if they didn't cost much hardware, but not mandatory in this class in my opinion. Letting the logic channels trigger the scope (so you can trigger on certain serial data) would be useful. You obviously also want pre-trigger information (so you can see the signal just before the problem area).
For the input impedances, you have basically two options: 1Mohm, 10-35pF or 50ohm. Designing a good wide-band 1Mohm front-end with good transient behavior, good overload recovery and reasonable linearity is really hard. It might be easier for just 20MHz, but there are few PC-based oscilloscopes that get this right. Something like 'I haven't tested it, but I expect the frequency response to be flat to 100MHz' doesn't really convince me. You're not in a transmission line environment, so you have to deal with reflections and parasitic inductance/capacitance. There are not a lot of off-the-shelf parts for this. I'd go for 50ohm. The disadvantage is that you can't use regular passive probes. There are some DIY FET probes floating around: Bob Pease published one in 'Troubleshooting Analog Circuits', Elektor has a design (and a PCB, there's a PDF of that article somewhere on the net last time I checked), and I think Jim Williams published one in an appendix of LT AN47. A resistive 50ohm probe works great for high-speed circuits over 100MHz, but the 50/500/2000ohm input resistance would probably be too low for many slow digital circuits.
I'd probably mostly use the scope for signals below 5V, but this highly depends on the user. Probes do slip, however, so it would be nice if accidental contact with mains wouldn't kill my computer (put opto-couplers or RF isolator chips in the serial connection?). I think the way for this project to succeed is to really limit the scope (as in range, not oscilloscope). For example, only signals of 0-5V, fixed gain, absolute max -15V to +40V, DC-coupled, and I'd stick an isolation device in the UART port (I like the Silabs isopro/AD iCoupler devices, but opto-couplers might work too). In case of an overload, only the SUMP PUMP and wing would be killed, and not the computer.