Sure. Any and all partition tools can do that. If booting from a live cd with Gparted or Qtparted, just take a look with that. Alternatively, use parted from the command line.
1. You suggest creating a target partition that is slightly larger than the
source partition. Is there a reason why this is better than creating a
partition of identical size? Are there Linux tools that I can use to find
out the exact size of the source partition and create a partition of
identical size on the target drive?
However, I am assuming that your drive is faulty and that you are having trouble reading from it. In that case, you may not be able to read the partition table from it. It's such a
straightforward thing to do, I though the reason you don't know the exact size was due to that.
2. Per your response to (1), are there Linux tools that can
non-destructively resize a partition? I tried using parted to resize the
NTFS partition that I created with cfdisk, but it refused, saying it does
not support NTFS.
Parted can resize the partition, but you need ntfsprogs to resize the filesystem on it. Any GUI to parted (Gparted or Qtparted) should come with a recent version of ntfsprogs and will work without problems. It will do both things at the same time.
Yes, you will still be ok. As far as a filesystem goes, it doesn't care whether it's bootable or not, nor does it care whether it is primary or logical. Those parameters change how your motherboard handles the drive at boot time; if more than one partition is set to bootable, it will boot the first one it finds.
3. My source partition is primary bootable NTFS, even though it does not
contain an OS. Should I create a primary
bootable NTFS target partition on
the target drive? (It already has a primary bootable NTFS partition at the
beginning of the drive containing a copy of Windows XP. This may cause
problems.) If I create a logical and/or non-bootable target partition and
ddrescue to it from the source partition, would I still be OK?