Exactly there are a number of features that appear in the real-world part that aren't worth modelling in CAD. We want to deburr an edge to remove the sharp stuff but it probably isn't worth adding a chamfer just so we can select it to make a deburr operation. So we just select the edges.
A keyhole might be similar.
I would implement this from the bottom up:
First write a generator. This is a python module in the Generators/ subdirectory. It will have a function called generate() that takes all inputs required to calculate a valid keyhole toolpath. It will return a list of path commands. The generator does not need to add feed rate to the commands, that will be added later. Just brainstorming, this generator needs to know the center position of the 'hole', depth, which direction to cut laterally, and distance.
That can probably all be simplified into a startPoint, and endPoint.
The generate() function can assume the machine is already at the startPoint. It should calculate the toolpath moving down, forward, back, and rapid up.
This generator will be quite simple. It's meant to be. So we'll also write a set of unit tests in the PathTests/ directory to thoroughly test it. I would make just that the first Pull Request. We now have a useful function that can be used in a macro and implemented into a full operation.
Next would be the operation. There's a lot of boilerplate code we can use. There might be some unique stuff depending on what you want the user to select or input. Regardless, it will be the operation's job to get the user input, verify correctness, call the generator, add the feed rates, and store the results.
Start with step one. I'll help as needed.