The PIC micros take 5 lines for ICSP.
I have used this chip a lot. It's burned into memory.
1. MCLR/Vpp (pin 4, GPIO 3)
2. Vdd (pin 1)
3. Ground (pin 8 )
4. Data (pin 7, GPIO 0)
5. Clock (pin 6, GPIO 1)
The nice thing with PICmicros, just about all of the ones identified as "low pin count," will have the same orientation of these programming pins (except the Vss will be X, where X= highest/last pin, Data will be X-1, Clk will be X-2. So, for instance, if you used a chip clip, you could use the same 8 pin chip clip and breakout to connect to most of the 8, 14, and 20 pin PIC micros of the same package.
The PK3 is the fastest way to program these things. The thing to watch out for is capacitance on MCLR in particular. Any extra capacitance/inductance will cause a failure. The gate of a small signal FET will mess it up, for instance. Clk and Data lines are also somewhat sensitive.
In any batch flashing, you will experience occasional failure to preserve OSCCAL (a banal feature of these basic devices; step up to midrange, and this problem goes away). Since you are using external crystal, I would make sure that your code does not load osccal, since you aren't using it, anyway. If it gets overwritten with an invalid number, and if you use a template code which loads osccal as the first instruction, you will have a chip that won't run. The way the chip loads it is to call the last word of program memory. A valid OSCCAL starts with w/e is the instruction for RETLW (return literal value) + 8 bit osccal value. So a corrupt osccal that is not a "RETLW" instruction will end up breaking the code by creating loop until stack overflows. 1. Call last instruction and push the stack. 2. Execute w/e the corrupt instruction ends up being 3. rollover to the beginning.
If you omit/remove this instruction, your code will run even if osccal gets fubared. The pk3 might give you verification error on the first flash, due to invalid osccal; just flash it again, accepting invalid osccal, since this is no problem.